package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * JDBC  Java DataBase Connectivity   java数据库连接
 *
 * JDBC是java官方提供的一套标准接口，使用这组接口可以与任何数据库连接连接并进行相关操作
 * 这意味着不同的数据库提供商都会编写一套类来实现JDBC接口，使用这套实现类就可以操作该具体的数据库了
 * 而这套实现类被我们称为连接该数据库所使用的JDBC"驱动"
 *
 * JDBC中核心的接口
 * DriverManager:驱动管理器，负责加载驱动类并基于驱动类与数据库建立连接
 * Connection:它的每一个实例用于表示与数据库的一个连接，用于创建SQL语句执行对象Statement
 * Statement:SQL语句的执行对象，负责向数据库执行某条SQL语句
 * ResultSet:结果集对象，当我们执行DQL语句会产生查询结果集，通过ResultSet来访问结果集中的数据
 */
public class JDBCDemo1 {
    public static void main(String[] args) {
        /*
            准备工作:
            下载不同数据库提供上所提供的驱动包(一个jar文件，里面保存了JDBC的实现类)
            使用Maven来完成驱动的下载，只要在pom.xml文件中添加对应的依赖即可

            操作数据库的基本步骤
            1:加载驱动
              Class.forName("驱动的完全限定名")
              不同数据库提供的驱动类名字不一致，需要结合具体的数据库指定

            2:使用DriverManager加载驱动并与数据库建立连接，生成Connection对象
            3:通过Connection创建SQL语句执行对象Statement
            4:通过Statement来执行SQL语句
            5:如果执行的是DQL语句则会得到一个ResultSet结果集
              通过ResultSet遍历结果集内容
            6:关闭数据库连接
         */
        try {
            //1
            Class.forName("com.mysql.cj.jdbc.Driver");

            //2
            Connection connection = DriverManager.getConnection(
                    //url地址不同数据库格式不完全一样
                    //  jdbc:mysql://数据库地址:端口/数据库名?参数...
                    "jdbc:mysql://localhost:3306/tedu?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true",
                    "root",
                    "root"
            );
            System.out.println("与数据库连接成功");

            //3
            Statement statement = connection.createStatement();
            /*
                创建一张表:userinfo
                CREATE TABLE userinfo(
                    id INT PRIMARY KEY AUTO_INCREMENT,
                    username VARCHAR(32),
                    password VARCHAR(32),
                    nickname VARCHAR(32),
                    age INT(3)
                )
             */
            String sql =    "CREATE TABLE userinfo("+
                            "id INT PRIMARY KEY AUTO_INCREMENT,"+
                            "username VARCHAR(32),"+
                            "password VARCHAR(32),"+
                            "nickname VARCHAR(32),"+
                            "age INT(3)"+
                            ")";
            /*
                boolean execute(String sql)
                用来执行任意种类的SQL语句。返回值表示执行后是否产生了查询结果集。
                实际上执行DML操作和DQL操作都有专门的方法，因此execute方法通常用来执行DDL语句
             */
            statement.execute(sql);
            System.out.println("创建表完毕");

            //操作完毕后关闭连接
            connection.close();
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    }
}
